﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Enterprise.Infrastructure.Repository;
using Enterprise.Infrastructure.Entity;
using Enterprise.Domain.Entities;

namespace Enterprise.Domain.Logic
{
    public sealed class BLLAutenticar
    {
        private CredencialProvider _credencialProvider;
        private Guid _passaporte;
        private bool _processado;
        private EntidadeCredencial _credencial = new EntidadeCredencial();
 
        public BLLAutenticar() 
        {
            _credencialProvider = new CredencialProvider();
            _credencial = new EntidadeCredencial(); 
        }

       


        /// <summary>
        /// Expira uma Credencial 
        /// </summary>
        /// <param name="passaporte"></param>
        /// <returns></returns>
        public bool ExpirarCredencial(Guid passaporte) 
        {
            _credencial.Passaporte = passaporte;
            _credencial.DataExpiracao = DateTime.Now;
            try
            {
             _processado =  _credencialProvider.Atualizar(_credencial);
            }
            catch (Exception ex) 
            {
                throw ex;
            }

            return _processado;
          
        }

        /// <summary>
        /// Gera uma nova credencial e Salva no Banco de Dados. Retorna o ID Gerado.  
        /// </summary>
        /// <param name="login"></param>
        /// <returns></returns>
        public Guid CriarCredencial(Login login) 
        { 
            
            _credencial.Passaporte = System.Guid.NewGuid();
            _credencial.Usuario = login.Usuario;
            _credencial.Origem = login.Origem;
            _credencial.DataExpiracao = DateTime.Now.AddMinutes(20);
            _credencial.DataDeGeracao = DateTime.Now;
            try
            {
              _passaporte =  _credencialProvider.Criar(_credencial);
            }
            catch (Exception ex) 
            {
                throw ex;
            }

            return _passaporte;
        }


        /// <summary>
        /// Retorna a Validade do passaporte.  
        /// </summary>
        /// <param name="passaporte"></param>
        /// <returns></returns>
        public DateTime ObterValidadePassaporte(Guid passaporte) 
        {
            try
            {
                _credencial = _credencialProvider.ObterPorId(passaporte);
                return _credencial.DataExpiracao;
            }
            catch (Exception ex) 
            {
                throw ex; 
            }
        }

        /// <summary>
        /// Retorna a Credencial. 
        /// </summary>
        /// <param name="passaporte"></param>
        /// <returns></returns>
        public EntidadeCredencial ObterCredencial(Guid passaporte) 
        {
            try
            {
                _credencial = _credencialProvider.ObterPorId(passaporte);
                return _credencial;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        
        }
       

        

    }
}
